package com.shuang.hash3;

import java.util.HashSet;
import java.util.Set;

public class Ishappy {

    public boolean isHappy(int n) {

        //可能出现无限循环 说明可能出现重复的数 反复陷入循环
        //使用Set集合去重 当集合不包含重复的这个数时才进行平方和

        //定义Set集合
        Set set = new HashSet();

        while (n != 1 && !set.contains(n)) {
            set.add(n);
            //定义一个方法用来计算平方和后的下一个数
            n = getNextNum(n);
        }

        //跳出上述循环的两种可能：要么n等于1返回true 要么在set集合中n重复出现
        return n == 1;
    }

    private int getNextNum(int n) {

        int sum = 0;
        while (n > 0) {
            //每次取出n的个位数t
            int t = n % 10;

            //求每位的平方和
            sum += t * t;

            //去掉n的个位数
            n = n / 10;
        }
        return sum;
    }
}
